package com.bnz.servlet;


import com.bnz.cart.Cart;
import com.bnz.entity.Product;
import org.apache.commons.lang3.StringUtils;
import org.apache.taglibs.standard.tag.common.core.RemoveTag;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.Map;

@WebServlet("/cart")
public class Servletd extends HttpServlet {

    // 重写初始化方法

    @Override
    public void init() throws ServletException {

    }
    // 1、根据传入的方法不同，执行不同的方法

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.1、拿到请求的参数
        String cmd = req.getParameter("cmd");
        // 2.2、根据拿到的参数跳转页面(前提是不为空)
        if (StringUtils.isNotBlank(cmd)){
            // 2.3、添加
            if ("add".equals(cmd)){
                // 加入购物车
                add(req,resp);
            }
            // 2.4、移除购物车中，选中的商品
            if ("remove".equals(cmd)){
                remove(req,resp);
            }
            // 2.5、清空购物车
            if ("clear".equals(cmd)){
                clear(req,resp);
            }
        }
    }

    // 1、加入购物车
    private void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.1、获取到添加的商品id
        String pids= req.getParameter("pid");
        // 1.2、获取到servletContext上下文对象
        ServletContext servletContext = this.getServletContext();
        // 1.3、拿到其中的商品信息
        Map<Integer, Product> products = (Map<Integer, Product>) servletContext.getAttribute("products");// Application监听器中定义的
        // 1.4、将id转化为整数
        Integer pid = new Integer(pids);
        HttpSession session = req.getSession();
        // 1.5、根据key获取到value(拿到了当前key的数据)
        Product product = products.get(pid);
        // 1.6、拿到购物车对象
        Cart cart = (Cart) session.getAttribute("cart");
        // 1.7、购物车不存在就进行创建
        if (cart == null){
            cart = new Cart();
        }
        // 1.8、将选中的商品添加到购物车
        cart.add(product);// product,1.5已经拿到了数据
        // 1.9、将购物车里的数据放进session
        session.setAttribute("cart",cart);
        // 1.10、进行页面转发
        req.getRequestDispatcher("/cartlist.jsp").forward(req,resp);

    }

    // 2、移除商品
    private void remove(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 2.1、得到要移除的商品id(前端点击，传过来的)
        String pids = req.getParameter("pid");
        // 2.2、将pid转化为int
        Integer pid = new Integer(pids);
        // 2.3、通过session，拿到购物车
        HttpSession session = req.getSession();
        Cart cart = (Cart) session.getAttribute("cart");
        // 2.4、将拿到的pid从购物车删除
        cart.remove(pid);
        // 2.5、进行页面的转发或重定向
        req.getRequestDispatcher("/cartlist.jsp").forward(req,resp);

    }
    // 3、将购物车清空
    private void clear(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 3.1、拿到购物车
        // 3.1.1、获取session
        HttpSession session = req.getSession();
        // 3.1.2、拿到购物车
        Cart cart = (Cart) session.getAttribute("cart");
        // 3.2、将购物车删除
        cart.clearCart();
        // 3.3、进行页面的转发或重定向
        req.getRequestDispatcher("/cartlist.jsp").forward(req,resp);

    }
}
